package com.belief.authlogin.controller;

import cn.hutool.core.util.StrUtil;
import com.belief.authlogin.utils.CheckAuthorizeCode;
import com.belief.authlogin.utils.DESUtils;
import com.belief.authlogin.utils.LicenseCode;
import com.belief.authlogin.utils.RegeditUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;

/**
 * 版权：(C) 版权所有 苏州彼立孚数据科技有限公司
 * <简述>
 * <详细描述>
 *
 * @author Lynkin
 * @create: 2021-07-14 10:16
 */
@Controller
//@RequestMapping("/aidaroe")
public class AidaroeController {

    //行政区划，替代物理地址，加密只用了硬盘序号
    public String xzqh = "0512";

    //系统名称
    public String xm_name = "AIDAROE";


    /**
     * 单独的验证授权的方法，该方法中拿授权文件中的授权码，解密成一个
     * 系统名称+行政区划+硬盘序号+授权时间+授权截止时间串，
     * 然后获取本机的系统名称+行政区划+硬盘序号串，两者进行比较，如果验证通过，再判断时间是否
     * 到期，如果都通过，则返回验证通过。
     * 否则，使用本机的系统名称+行政区划+硬盘序号串，加密成一个申请码返回给前台
     *
     * @return
     */
    @CrossOrigin
    @RequestMapping( "/checkLicense")
    public String checkLicense(String authorizeCode, Model model) {
        Map resultMap = new HashMap();
        try {
            if (StrUtil.isNotBlank(authorizeCode)) {
                if (CheckAuthorizeCode.checkAuthorizeCode(authorizeCode, xm_name, xzqh)) {
                    resultMap.put("success", true);
                    resultMap.put("msg", "授权成功");
                    RegeditUtils.writeValue("aidaroe", authorizeCode);
                    String content = DESUtils.decrypt(authorizeCode);
                    model.addAttribute("time", content.split(",")[3]);
                    return "success";
                } else {
                    model.addAttribute("msg", "授权码错误");
                    return "authLogin";
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        resultMap.put("success", false);
        resultMap.put("msg", "系统未授权，请授权后登录");

        return "authLogin";
    }

    /**
     * <简介> 获取申请码
     * <详细描述>
     * @author Lynkin
     * @param
     * @return
     */
    @CrossOrigin
    @GetMapping ("/getApplyCode")
    @ResponseBody
    public Object getApplyCode() {
        Map resultMap = new HashMap();
        resultMap.put("license", LicenseCode.getApplyCode(xm_name, xzqh));
        return resultMap;
    }


    /**
     * <简介> 跳转到登录页面
     * <详细描述>
     * @author Lynkin
     * @param
     * @return
     */
    @RequestMapping("/authLogin")
    public String authLogin(Model model) {
        Map resultMap = new HashMap();
        //去注册表获取信息
        String aidaroe = RegeditUtils.getValue("aidaroe");
        if (StrUtil.isNotBlank(aidaroe)) {
            try {
                if (CheckAuthorizeCode.checkAuthorizeCode(aidaroe, xm_name, xzqh)) {
                    resultMap.put("success", true);
                    resultMap.put("msg", "授权成功");
                    String content = DESUtils.decrypt(aidaroe);
                    model.addAttribute("time", content.split(",")[3]);
                    return "success";
                } else {
//                    model.addAttribute("msg", "授权码错误");
                    return "authLogin";
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return "authLogin";
    }
}
